程序设计范型

  面向对象的程序设计是一种程序设计技术---对一组问题写出“好”程序的一种范型。如果术语“面向对象程序设计语言”有一点意思的话,它意味的就是某种程序设计语言特别提供了一些机制,以很好地支持在其中做面向对象风格的程序设计。

  这里存在着一个重要的区分。说一个语言支持某种风格的程序设计,如果它提供了一些功能,使得它能够方便地(比较容易、安全和有效地)用于这种程序设计风格。如果要写那样的程序必须付出很大的努力或利用各种技巧,就说这个语言不支持某种技术。这样的语言只是允许使用这类技术。例如,你可以在Fortran77里写结构化程序,或在C里写面向对象的程序,但这样做时会出奇地困难,因为这些语言并不直接支持这些技术。

  要支持一种范型,不仅在于某些能直接用于该种范型的显见形式的语言功能,还在于一些形式上更加细微的,对无意中偏离了这种范型的情况做编译时或者运行时的检查。类型检查是这类事物中最明显的例子,歧义性检查和运行时检查也被用做对某种范型的语言支持。语言之外的功能,例如库和程序设计环境,也能进一步提供对一种范型的支持。

  一种语言并不会因为拥有其他语言所没有的某种特征,就比其他的语言更好。这方面的反例太多了。最重要的问题并不会因为拥有其他语言所没有的某种特征,而在于它所拥有的特征是否足以在某个所希望的应用领域中支持某种所希望的程序设计风格:

1)、所有特征必须清晰而优美地集成在语言之中。

2)、必须能组合使用这些特征去得到一种解决方案,如果无法做这样组合,那就会要求额外的独立的特征。

3)、应尽可能减少荒谬的和“专用的”特征。

4)、任何特征的实现都不应该给未使用这种特征的程序强加明显的额外开销。

5)、用户只需要了解自己在写程序时所明确使用的那个语言子集。

第一条原则明显是美学的和逻辑的。随后两条表述的是最小化的思想。最后两条可以总结为“你不知道的东西不会伤害你”。

  设计C++就是为了支持数据抽象、面向对象的程序设计和通用型程序设计,以及在这些风格约束之下的传统的C程序设计技术。它从未有意要给其用户强加某种特殊的程序设计风格。

  下面几节将考虑某些程序设计风格,以及支持它们的关键性语言机制。整个展示过程的进展是通过一系列技术,开始于过程式程序设计,而后引向在面向对象的程序设计中使用类层次结构,以及采用模板的通用型程序设计。每个范型都是在其前驱的基础上构造起来的,为C++程序员的工具箱里加上一点新东西,也反映了一种已被证明非常有效的设计方法。

  这里对语言特征的展示并不完全。在这里想强调的是设计方法以及组织程序的方式,而不是语言的细节。在这个阶段,把握什么东西可以用C++做的基本思想,远比正确地理解怎样才能做到它更重要得多。

🔚